#include"mq_connection.hpp"

void cb(const bitmq::Channel::ptr&channel,const std::string&consumer_tag,const bitmq::BasicProperties*bp,const std::string&body)
{
    std::cout<<consumer_tag<<"---消费了一条消息---"<<body<<std::endl;
    channel->basicAck(bp->id());
}
int main(int argc,char*argv[])
{
    if(argc!=3)
    {
        std::cout<<"./consumer_client queue"<<std::endl;
        return -1;
    }
    //1、实例化异步线程池
    bitmq::AsyncWord::ptr awp=std::make_shared<bitmq::AsyncWord>();
    //2、实例化连接对象
    bitmq::Connection::ptr conn=std::make_shared<bitmq::Connection>("127.0.0.1",8888,awp);
    //3、通过连接创建信道
    bitmq::Channel::ptr channel=conn->createChannel();
    //4、通过信道，声明所需
    //  1、声明一个交换机exchange1  广播类型
    google::protobuf::Map<std::string, std::string> map;
    channel->declareExchange("exchange1",bitmq::ExchageType::TOPIC,true,false,map);
    //  2、声明一个queue1  --  queue1
    channel->declareQueue("queue1",true,false,false,map);
    //  3、声明一个queue2  --  news.music.#
    channel->declareQueue("queue2",true,false,false,map);
    //  4、将exchange1  与  queue1绑定起来
    channel->basicBind("exchange1","queue1","queue1");
    //  5、将exchange2  与  queue2绑定起来
    channel->basicBind("exchange1","queue2","news.music.#");

    //5、消费
    auto func=std::bind(cb,channel,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3);
    channel->basicConsumer(argv[1],argv[2],false,func);
    while(1)std::this_thread::sleep_for(std::chrono::seconds(3));
    //6、关闭信道
    conn->closeChannel(channel);
    return 0;
}